# 作者: 陈其志 
# 2025年02月25日11时22分03秒 
# 2716847110@qq.com
import re


def func(n):
    """
    函数实现一个迭代器,把东西能够让for i in 【】中，【】中必须是一个可迭代对象
    把range（10）换掉，写自己的
    迭代器--->>生成器的一种
    :param n:
    :return:
    """
    i = 0
    while i < n:  # 迭代次数（0-9）
        yield i  # yield 让程序暂停到这个位置，并把i返回，直到下次生成器运行
        i += 1
    return


print('-' * 50)
for i in func(10):
    print(i, end=' ')
print(func(10))  # <generator object func at 0x000002605D67FC40>
print('-' * 50)
my_iter = func(3)  # 执行这段相当于生成了一个可迭代器 func是一个可迭代对象，每一次实例化就生成一个可迭代器
# next就是让yeild执行
# print(next(my_iter))
# print(next(my_iter))
# print(next(my_iter))  # 生成器后面没有了就报错StopIteration
print('-' * 50)
for i in my_iter:
    print(i)  # 这里的my_iter已经迭代完了，下面i都没办法迭代

for i in my_iter:
    print(i)
print('-' * 50)
print('-' * 50)
for i in func(3):  # 这里是可迭代对象，每次都是新生成迭代器去迭代
    print(i)

for i in func(3):
    print(i)
print('-' * 50)
my_list = [1, 2, 3]  # 可迭代对象

for i in my_list:
    print(i)

for i in my_list:
    print(i)
